package com.baizhi.shane.sys.service;

import com.baizhi.shane.sys.entity.SysUser;
import com.baizhi.shane.sys.vo.*;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
* @author wbz12
* @description 针对表【sys_user(系统用户表)】的数据库操作Service
* @createDate 2023-03-26 18:19:03
*/
public interface SysUserService extends IService<SysUser> {
    UserSignUpOutVO signUp(UserSignUpInVO userSignUpInVO);

    UserLoginOutVO login(UserLoginInVO userLoginInVO);

    /**
     * 更新用户登录的缓存信息
     *
     * @Author 闻柏智
     * @Date 12:36 2023/12/31
     * @Param token
     * @Param userId: 默认为当前登录用户
     * @Param time: 默认为1天
     * @return boolean
     **/
    boolean updateUserLoginCache(String token, Long userId, Long time);

    boolean checkUsernameAlreadyExists(String username);
    /**
     * 密码字符串转MD5
     *
     * @Author 闻柏智
     * @Date 20:45 2023/3/26
     * @Param password
     * @Param salt:
     * @return java.lang.String
     **/
    String passwordToPasswordMd5(String password, String salt);
    /**
     * 生成密码盐
     *
     * @Author 闻柏智
     * @Date 20:45 2023/3/26
     * @Param
     * @return java.lang.String
     **/
    String getSalt();
    /**
     * 获取当前登录人信息
     *
     * @Author 吴若琦
     * @Date 16:23 2023/7/29
     * @Param
     * @return com.baizhi.shane.sys.vo.LoginUserVO
     **/
    public LoginUserVO getLoginUserInfo();

    /**
     * 获取当前登陆人角色英文名列表
     *
     * @Author 吴若琦
     * @Date 16:24 2023/7/29
     * @Param userId
     * @return java.util.List<java.lang.String>
     **/
    public List<String> getUserRoleEnNameList(Long userId);

    /**
     * 用户退出登录
     *
     * @Author 闻柏智
     * @Date 11:08 2023/10/25
     * @Param
     * @return java.lang.String
     **/
    String loginOut();

    /**
     * 用户修改用户名
     *
     * @Author 闻柏智
     * @Date 23:56 2023/10/29
     * @Param updateUsernameVO
     * @return java.lang.String
     **/
    String updateUsername(UpdateUsernameVO updateUsernameVO);

    /**
     * 用户修改密码
     *
     * @Author 闻柏智
     * @Date 0:07 2023/10/30
     * @Param updateUsernameVO
     * @return java.lang.String
     **/
    SuccessedOutVO updatePassword(UpdatePasswordVO updateUsernameVO);

    /**
     * 验证传入的字符串是否是用户的真实密码
     * 为真返回1，为假返回0
     *
     * @Author 闻柏智
     * @Date 23:52 2023/12/28
     * @Param checkUserPasswordInVO
     * @return java.lang.String
     **/
    String checkUserPassword(CheckUserPasswordInVO checkUserPasswordInVO);

    /**
     * 修改用户信息
     *
     * @Author 闻柏智
     * @Date 18:36 2023/12/29
     * @Param sysUser
     * @return com.baizhi.shane.sys.vo.SuccessedOutVO
     **/
    SuccessedOutVO updateUserInfo(SysUser sysUser);

    SuccessedOutVO checkNowLoginUserHasAdminRole();

    /**
     * 删除用户-通过ID
     *
     * @Author 闻柏智
     * @Date 17:54 2024/3/4
     * @Param idVO
     * @return com.baizhi.shane.sys.vo.SuccessedOutVO
     **/
    SuccessedOutVO deleteOneUserById(IdVO idVO);
}
